IMPLEMENTATION MODULE Tad_Solicitud;

FROM StrIO IMPORT WriteString, WriteLn,WriteString;  
FROM FIO IMPORT OpenToRead,Close,File,Exists,ReadString;
FROM DynamicStrings IMPORT String, ConCat, InitString,CopyOut, char;
FROM Storage IMPORT ALLOCATE, DEALLOCATE;
FROM NumberIO IMPORT ReadInt,WriteInt;
FROM DynamicStrings IMPORT String, Slice, CopyOut, Index, InitString;
FROM StringConvert IMPORT StringToInteger;


TYPE Solicitud = POINTER TO Soli;

TYPE Soli = RECORD
			codigo_estudiante : INTEGER;
			codigo_materia : INTEGER;
			preferencia: INTEGER;
			END;

PROCEDURE Nuevo (codigo_estudiante:INTEGER;codigo_materia:INTEGER;preferencia : INTEGER) : Solicitud;
VAR peticion : Solicitud;
BEGIN
	NEW(peticion);
	
	IF (peticion = NIL) THEN
		RETURN NIL;
	END;
	peticion^.codigo_estudiante := codigo_estudiante;
	peticion^.codigo_materia := codigo_materia;
	peticion^.preferencia := preferencia;
	RETURN peticion;
	
END Nuevo;

PROCEDURE AsigCodigoEstudiante (VAR peticion : Solicitud; codigo : INTEGER);
BEGIN

	IF peticion = NIL THEN
		WriteLn();
		WriteString('el elemento apunta a una caja vacia');
	END;
	
	peticion^.codigo_estudiante := codigo;
	
END AsigCodigoEstudiante;

PROCEDURE AsigCodigoMateria (VAR peticion : Solicitud; codigo : INTEGER);
BEGIN

	IF peticion = NIL THEN
		WriteLn();
		WriteString('el elemento apunta a una caja vacia');
	END;
	
	peticion^.codigo_materia := codigo;
	
END AsigCodigoMateria;

PROCEDURE AsigPreferencia (VAR peticion : Solicitud; preferencia : INTEGER);
BEGIN

	IF peticion = NIL THEN
		WriteLn();
		WriteString('el elemento apunta a una caja vacia');
	END;
	
	peticion^.preferencia := preferencia;
	
END AsigPreferencia;

PROCEDURE GetCodigoEstudiante (peticion : Solicitud) : INTEGER;
BEGIN

	IF peticion = NIL THEN
		WriteString('apuntador vacio');
		RETURN 0;
	END;
	
	RETURN peticion^.codigo_estudiante;
	
END GetCodigoEstudiante;

PROCEDURE GetCodigoMateria (peticion : Solicitud) : INTEGER;
BEGIN

	IF peticion = NIL THEN
		WriteString('apuntador vacio');
		RETURN 0;
	END;
	
	RETURN peticion^.codigo_materia;
	
END GetCodigoMateria;

PROCEDURE GetPreferencia (peticion : Solicitud) : INTEGER;
BEGIN

	IF peticion = NIL THEN
		WriteString('apuntador vacio');
		RETURN 0;
	END;
	

	RETURN peticion^.preferencia;
	
END GetPreferencia;

PROCEDURE Carga(data:File) : Solicitud;

VAR peticion : Solicitud;
VAR valido : BOOLEAN;
VAR string  : String;
VAR codigoEstudiante,codigoMateria,preferencia :INTEGER;
VAR linea : ARRAY [0..200] OF CHAR;
VAR inic,fin,i : CARDINAL;
VAR num : INTEGER;

BEGIN

	valido := TRUE;
	inic := 0;
	ReadString(data,linea);
	string := InitString(linea);
	fin := Index(string,":",inic);
	codigoEstudiante := StringToInteger(Slice(string,inic,fin),10,valido);
	inic := fin + 1;
	fin := Index(string,":",inic);
	codigoMateria := StringToInteger(Slice(string,inic,fin),10,valido);
	inic := fin + 1;
	fin := 0;
	preferencia := StringToInteger(Slice(string,inic,fin),10,valido);
	peticion := Nuevo(codigoEstudiante, codigoMateria, preferencia);
	RETURN peticion;
	
END Carga;

PROCEDURE Imprimir(peticion: Solicitud);
BEGIN
	WriteLn();
	WriteString('(');
	WriteString('CodigoEstudiante:');
	WriteInt(GetCodigoEstudiante(peticion),0);
	WriteString(',CodigoMateria:');
	WriteInt(GetCodigoMateria(peticion),0);
	WriteString(',Preferencia:');
	WriteInt(GetPreferencia(peticion),0);
	WriteString(')');
	WriteLn();
END Imprimir;


END Tad_Solicitud.
